unit clsnotacompra;

interface
uses Dm, dbtables, biblio, Sysutils, Dialogs, Forms, Windows;
type
  TNotaCompra = class(tobject)
  private
    Notac_Numero: string;
    Notc_Serie: string;
    Ent_Codigo: string;
  public
    Reg_Codigo: string;
    Conf_Codigo: string;
    Emp_Codigo: string;
    Codf_Codigo: string;
    Nato_Codigo: string;
    Moe_Codigo: string;
    Hist_codigo: string;
    Notc_numpgtos: integer;
    Notc_observacao: string;
    Notc_aliqipi: double;
    Notc_aliqicms: double;
    Notc_aliqicmssubs: double;
    Notc_descicms: double;
    Notc_aliqdesconto: double;
    Notc_aliqencargos: double;
    Notc_valorfrete: double;
    Notc_valorseguro: double;
    Notc_valorencargos: double;
    Notc_bcalcipi: double;
    Notc_bcalcicms: double;
    Notc_bcalcicmssubs: double;
    Notc_bcalcdescicms: double;
    Notc_dataentrada: TDateTime;
    Notc_datafatura: TDateTime;
    Notc_valoripi: double;
    Notc_valoricms: double;
    Notc_valoricmssubs: double;
    Notc_valordescicms: double;
    Notc_isentaipi: double;
    Notc_isentaicms: double;
    Notc_outrasipi: double;
    Notc_outrasicms: double;
    Notc_valorcontabil: double;
    Notc_inscestsub: string;
    Notc_Desconto: double;
    Imp_NotaFiscal: string;
    Notc_ValorAcresc: double;
    Notc_IpiAdicional: double;
    Notc_SeguroCarga: double;
    Notc_VICMSSeguro: double;
    Notc_PICMSSeguro: double;
    Notc_Emitente: string;
    Codf_Codigo1: string;
    Canp_Codigo: string;
    Tran_Codigo: string;
    Notc_FreteConhecimento: double;
    Notc_DataLancamento: TDateTime;
    Notc_TipoFrete: string;
    Notc_Mensagem: string;
    Notc_Hora: string;
    Notc_TotalProduto: double;

    NFCe_Chave: string;
    NFCe_Random: string;
    NFCe_Protocolo: string;
    NFCe_Lote: string;
    NFCe_Justificativa: string;
    NFCe_Modelo: string;
    NFCe_Recibo: string;
    NFCe_Resultado: string;
    NFCe_ChaveOrigem: string;
    NFCe_ChaveRefer: string;
    Notc_PlacaVeic: string;
    Notc_Uf_Placaveic: string;
    Mod_Codigo: string;
    Notc_Desp_Acessoria: Double;

    Notc_TipoNota: string;
    Notc_Serie_Ref: string;
    Notac_Numero_Ref: string;
    Notc_EstoqueBaixado: string;

    Notc_Obs_LancFiscal: string;
    Cod_Mensagem: string;
    Est_Sigla: string;

    NFCe_DataAutorizacao: TDateTime;
    NFCe_HoraAutorizacao: string[8];
    Notc_qtdeemb: double;

    Sit_Codigo: string;
    Notc_Pis: Double;
    Notc_Cofins: Double;
    Notc_Pis_St: Double;
    Notc_Cofins_St: Double;
    Id_Operacao: Integer;
    Cod_Obs: string;
    Notc_II: Double;

    Notc_pesoliq: double;
    Notc_pesobru: double;
    Notc_ValorFinanciamento: Double;

    function Gravar(p_Notac_numero, p_Notc_serie, p_Ent_codigo: string): Byte;
    procedure Corrige_CFOP(p_Notac_numero, p_CFOP: string);
    function Recuperar(p_Notac_numero, p_Notc_serie, p_Ent_codigo: string): Byte;
    function Excluir(p_Notac_numero, p_Notc_serie, p_Ent_codigo: string): Byte;
    function Total_Produtos(p_Notac_numero, p_Notc_serie, p_Ent_codigo: string): double;
    procedure Imprimiu_NF(Serie, Numero1, Numero2, Entidade: string; dataini, datafim: TDatetime);
    procedure Cancelar(Serie, Numero1, Numero2, Entidade: string);
    procedure Alterar_Historico(Numero1, Numero2, Serie, Entidade, p_Hist_Codigo, p_Codf_Codigo: string; p_DataEntrada: tdatetime);
    function Recupera_QtdeItens(p_Notac_numero, p_Notc_serie, p_Ent_codigo: string): Double;
    function Ultimo: string;
    function RecuperaChave(serie, numero, ent_codigo: string): string;

  end;

implementation

uses DB;

{ TNotaCompra }

procedure TNotaCompra.Alterar_Historico;
var
  tq: TQuery;

begin
  tq := TQuery.create(DmInt);
  tq.DatabaseName := DmInt.db.DatabaseName;
  tq.Active := false;
  tq.SQL.Clear;
  tq.Params.Clear;
  tq.SQL.Add('Update NotaCompra set Hist_Codigo=:a,Notc_dataentrada=:x,Codf_Codigo=:y where ' +
    'Notc_Serie=:b and (Notac_Numero=:c or Notac_Numero=:d) and ' +
    'Ent_Codigo=:e');
  tq.Params[0].AsString := p_Hist_Codigo;
  tq.Params[1].Asdatetime := p_DataEntrada;
  tq.Params[2].AsString := p_Codf_Codigo;
  tq.Params[3].AsString := Serie;
  tq.Params[4].AsString := StrZero(Numero1, 9);
  tq.Params[5].AsString := StrZero(Numero2, 9);
  tq.Params[6].AsString := StrZero(Entidade, 5);
  GeraLog('NOTACOMPRA', 'Alterar_Historico');
  tq.ExecSQL;
  tq.Close;
  tq.Free;
end;

procedure TNotaCompra.Cancelar;
var
  tq: TQuery;
begin
  tq := TQuery.create(DmInt);
  tq.DatabaseName := DmInt.db.DatabaseName;
  tq.Active := false;
  tq.SQL.Clear;
  tq.Params.Clear;
  tq.SQL.Add('Update NotaCompra set Canp_Codigo=:a where Notc_Serie=:b and (Notac_Numero=:c ' +
    'or Notac_Numero=:d) and Ent_Codigo=:e');
  tq.Params[0].AsString := Canp_Codigo;
  tq.Params[1].AsString := Serie;
  tq.Params[2].AsString := StrZero(Numero1, 9);
  tq.Params[3].AsString := StrZero(Numero2, 9);
  tq.Params[4].AsString := StrZero(Entidade, 5);
  GeraLog('NOTACOMPRA', 'Cancelar');
  tq.ExecSQL;

  //Limpa referencia de notas devolvidas
  tq.Active := false;
  tq.SQL.Clear;
  tq.Params.Clear;
  tq.SQL.Add('Update ItemNotaCompra set Ref_Notac_numero = null, Ref_Notc_serie = null, Ref_Ent_codigo = null ' +
    'where Notc_Serie=:b and (Notac_Numero=:c ' +
    'or Notac_Numero=:d) and Ent_Codigo=:e');
  tq.Params[0].AsString := Serie;
  tq.Params[1].AsString := StrZero(Numero1, 9);
  tq.Params[2].AsString := StrZero(Numero2, 9);
  tq.Params[3].AsString := StrZero(Entidade, 5);
  GeraLog('NOTACOMPRA', 'Cancelar');
  tq.ExecSQL;

  tq.Close;
  tq.Free;
end;

procedure TNotaCompra.Corrige_CFOP;
var
  tq: TQuery;
begin
  //p_CFOP:= copy(stringofchar(' ',4)+copy(p_CFOP,1,1)+copy(p_CFOP,3,3),1,4);
  tq := TQuery.create(DmInt);
  tq.DatabaseName := DmInt.db.DatabaseName;
  tq.Active := false;
  tq.SQL.Clear;
  tq.Params.Clear;
  tq.SQL.Add('Update ItemNotaCompra set Codf_Codigo=:a where Notac_numero=:b');
  tq.Params[0].AsString := '1.101';
  tq.Params[1].AsString := p_Notac_numero;
  GeraLog('NOTACOMPRA', 'Corrige_CFOP');
  tq.ExecSQL;
  tq.Close;
  tq.Free;
  p_CFOP := '';
end;

function TNotaCompra.Excluir(p_Notac_numero, p_Notc_serie,
  p_Ent_codigo: string): Byte;
var
  tq: TQuery;
begin
  tq := TQuery.create(DmInt);
  tq.DatabaseName := DmInt.db.DatabaseName;
  tq.SQL.Clear;
  tq.Params.Clear;
  tq.SQL.Add('Delete from Notacompra where Notac_numero=:K_Notac_numero and Notc_serie=:K_notc_serie and ent_codigo=:K_ent_codigo');
  tq.ParamByName('K_Notac_numero').AsString := p_Notac_numero;
  tq.ParamByName('K_Notc_serie').AsString := p_Notc_serie;
  tq.ParamByName('K_ent_codigo').AsString := StrZero(p_Ent_codigo, 5);
  try
    GeraLog('NOTACOMPRA', 'Excluir');
    tq.ExecSQL;
    Result := 1;
  except
    on E: Exception do begin
      Application.MessageBox(PChar('Erro ao excluir nota: ' + E.Message + #13 + #10 + E.ClassName), 'Erro', mb_iconwarning);
      result := 0;
    end;
  end;
  tq.Close;
  tq.Free;

end;

function TNotaCompra.Gravar;
var
  tq: TQuery;
begin
  tq := TQuery.create(DmInt);
  tq.DatabaseName := DmInt.Db.DatabaseName;
  tq.Active := false;
  tq.SQL.Clear;
  tq.Params.Clear;
  tq.SQL.add('Select * from Notacompra where Notac_numero=:K_Notac_numero and Notc_serie=:K_notc_serie and ent_codigo=:k_ent_codigo');
  tq.ParamByName('K_Notac_numero').AsString := P_notac_numero;
  tq.ParamByName('K_Notc_serie').AsString := P_notc_serie;
  tq.ParamByName('K_ent_codigo').AsString := StrZero(p_ent_codigo, 5);
  tq.Open;
  if tq.eof then begin
    tq.SQL.Clear;
    tq.Params.Clear;
    tq.SQL.add('Insert into notacompra ');
    tq.SQL.add('(NOTAC_NUMERO, NOTC_SERIE, ENT_CODIGO');
    tq.SQL.Add(',REG_CODIGO,CONF_CODIGO,EMP_CODIGO,CODF_CODIGO');
    tq.SQL.Add(',NATO_CODIGO,MOE_CODIGO,HIST_CODIGO,NOTC_NUMPGTOS,NOTC_OBSERVACAO');
    tq.SQL.Add(',NOTC_ALIQIPI,NOTC_ALIQICMS,NOTC_ALIQICMSSUBS,NOTC_DESCICMS,NOTC_ALIQDESCONTO');
    tq.SQL.Add(',NOTC_ALIQENCARGOS,NOTC_VALORFRETE,NOTC_VALORSEGURO,NOTC_VALORENCARGOS,NOTC_BCALCIPI');
    tq.SQL.Add(',NOTC_BCALCICMS,NOTC_BCALCICMSSUBS,NOTC_BCALCDESCICMS,NOTC_DATAENTRADA,NOTC_DATAFATURA');
    tq.SQL.Add(',NOTC_VALORIPI,NOTC_VALORICMS,NOTC_VALORICMSSUBS,NOTC_VALORDESCICMS,NOTC_ISENTAIPI');
    tq.SQL.Add(',NOTC_ISENTAICMS,NOTC_OUTRASIPI,NOTC_OUTRASICMS,NOTC_VALORCONTABIL,NOTC_INSCESTSUBS');
    tq.SQL.Add(',NOTC_DESCONTO,IMP_NOTAFISCAL,NOTC_VALORACRESC,NOTC_IPIADICIONAL,NOTC_SEGUROCARGA');
    tq.SQL.Add(',NOTC_VICMSSEGURO,NOTC_PICMSSEGURO,NOTC_EMITENTE,CODF_CODIGO1,CANP_CODIGO');
    tq.SQL.Add(',TRAN_CODIGO,NOTC_FRETECONHECIMENTO,NOTC_DATALANCAMENTO,NOTC_TIPOFRETE,NOTC_MENSAGEM');
    tq.SQL.Add(',NOTC_HORA,NFCE_CHAVE,NFCE_RANDOM,NFCE_PROTOCOLO,NFCE_LOTE');
    tq.SQL.Add(',NFCE_JUSTIFICATIVA,NFCE_MODELO,NFCE_RECIBO,NFCE_RESULTADO,NFCE_CHAVEORIGEM');
    tq.SQL.Add(',NOTC_PLACAVEIC,NOTC_UF_PLACAVEIC,NOTC_TOTALPRODUTO,mod_codigo,Notc_Desp_Acessoria,' +
      'NFCe_ChaveRefer, Notc_TipoNota, Notc_Serie_Ref, Notac_Numero_Ref, Notc_EstoqueBaixado,' +
      'Notc_Obs_LancFiscal, Cod_Mensagem, est_sigla, NFCe_DataAutorizacao, NFCe_HoraAutorizacao, ' +
      'Notc_qtdeemb, ');
    tq.SQL.Add('Sit_Codigo, Notc_Pis, Notc_Cofins, Notc_Pis_St, Notc_Cofins_St, Id_Operacao, Cod_Obs, Notc_II, Notc_pesoliq, Notc_pesobru, Notc_ValorFinanciamento )');

    tq.SQL.Add(' values(:K_Notac_numero,' +
      ':K_Notc_serie,' +
      ':K_Ent_codigo,');
    if Reg_Codigo <> '' then
      tq.SQL.add(':k_Reg_Codigo,')
    else
      tq.SQL.add('null,');
    if Conf_Codigo <> '' then
      tq.SQL.add(':k_Conf_Codigo,')
    else
      tq.SQL.add('null,');
    tq.SQL.add(':K_Emp_Codigo,' +
      ':K_Codf_Codigo,' +
      ':K_Nato_Codigo,' +
      ':K_Moe_Codigo,' +
      ':K_Hist_codigo,' +
      ':K_Notc_numpgtos,' +
      ':K_Notc_observacao,' +
      ':K_Notc_aliqipi,' +
      ':K_Notc_aliqicms,' +
      ':K_Notc_aliqicmssubs,' +
      ':K_Notc_descicms,' +
      ':K_Notc_aliqdesconto,' +
      ':K_Notc_aliqencargos,' +
      ':K_Notc_valorfrete,' +
      ':K_Notc_valorseguro,' +
      ':K_Notc_valorencargos,' +
      ':K_Notc_bcalcipi,' +
      ':K_Notc_bcalcicms,' +
      ':K_Notc_bcalcicmssubs,' +
      ':K_Notc_bcalcdescicms,' +
      ':K_Notc_dataentrada,' +
      ':K_Notc_datafatura,' +
      ':K_Notc_valoripi,' +
      ':K_Notc_valoricms,' +
      ':K_Notc_valoricmssubs,' +
      ':K_Notc_valordescicms,' +
      ':K_Notc_isentaipi,' +
      ':K_Notc_isentaicms,' +
      ':K_Notc_outrasipi,' +
      ':K_Notc_outrasicms,' +
      ':K_Notc_valorcontabil,' +
      ':K_Notc_inscestsub,' +
      ':k_Notc_Desconto,' +
      'null,' +
      ':k_Notc_ValorAcresc,' +
      ':k_Notc_IpiAdicional,' +
      ':k_Notc_SeguroCarga,' +
      ':k_Notc_VICMSSeguro,' +
      ':k_Notc_PICMSSeguro,' +
      ':k_Notc_Emitente,' +
      ':k_Codf_Codigo1,' +
      ':k_Canp_Codigo');

    if Tran_Codigo <> '' then begin
      tq.SQL.add(',:k_Tran_Codigo,')
    end else begin
      tq.SQL.add(',null,');
    end;
    tq.SQL.add(':k_Notc_FreteConhecimento, ' +
      ':k_Notc_DataLancamento, ' +
      ':k_Notc_TipoFrete, ' +
      ':k_Notc_Mensagem, ' +
      ':k_Notc_Hora, ');

    tq.SQL.add(':k_NFCe_Chave,' +
      ':k_NFCe_Random,' +
      ':k_NFCe_Protocolo,' +
      ':k_NFCe_Lote,' +
      ':k_NFCe_Justificativa,' +
      ':k_NFCe_Modelo,' +
      ':k_NFCe_Recibo,' +
      ':k_NFCe_Resultado,' +
      ':k_NFCe_ChaveOrigem,' +
      ':k_Notc_Placaveic,' +
      ':k_Notc_Uf_Placaveic,' +
      ':k_Notc_TotalProduto, ' +
      ':k_Mod_Codigo, ' +
      ':k_Notc_Desp_Acessoria, ' +
      ':k_NFCe_ChaveRefer,' +
      ':k_Notc_TipoNota, ' +
      ':k_Notc_Serie_Ref, ' +
      ':k_Notac_Numero_Ref, ' +
      ':k_Notac_EstoqueBaixado, ' +
      ':k_Notc_Obs_LancFiscal, ');
    if Cod_Mensagem <> '' then
      tq.SQL.Add(':k_Cod_Mensagem, ')
    else
      tq.SQL.Add('null,');

    if Est_Sigla <> '' then
      tq.SQL.Add(':k_est_sigla, ')
    else
      tq.SQL.Add('null,');

    tq.SQL.Add(':k_NFCe_DataAutorizacao, ' +
      ':k_NFCe_HoraAutorizacao, ' +
      ':k_Notc_qtdeemb, ');
    if Sit_Codigo = '' then
      tq.SQL.Add('null, ')
    else
      tq.SQL.Add(':k_Sit_Codigo, ');

    tq.SQL.Add(':k_Notc_Pis, :k_Notc_Cofins, :k_Notc_Pis_St, :k_Notc_Cofins_St ');

    if (Id_Operacao = 0) or (Id_Operacao = -1) then
      tq.SQL.Add(', null')
    else
      tq.SQL.Add(', :k_Id_Operacao');

    if Cod_Obs = '' then
      tq.SQL.Add(', null')
    else
      tq.SQL.Add(', :k_Cod_Obs');

    tq.SQL.Add(', :k_Notc_II, :k_Notc_pesoliq, :k_Notc_pesobru, :k_Notc_ValorFinanciamento)');
  end else begin
    tq.SQL.Clear;
    tq.Params.Clear;
    tq.SQL.add('Update Notacompra set ');
    if Reg_Codigo <> '' then tq.SQL.add('Reg_Codigo=:K_Reg_codigo,') else tq.SQL.add('Reg_Codigo=null,');
    if Conf_Codigo <> '' then tq.SQL.add('Conf_Codigo=:K_Conf_codigo,') else tq.SQL.add('Conf_Codigo=null,');
    tq.SQL.add('Emp_Codigo=:K_emp_codigo,' +
      'Codf_Codigo=:K_codf_codigo,' +
      'Nato_Codigo=:K_nato_codigo,' +
      'Moe_Codigo=:K_moe_codigo,' +
      'Hist_codigo=:K_Hist_codigo,' +
      'Notc_numpgtos=:K_Notc_numpgtos,' +
      'Notc_observacao=:K_Notc_observacao,' +
      'Notc_aliqipi=:K_Notc_aliqipi,' +
      'Notc_aliqicms=:K_Notc_aliqicms,' +
      'Notc_aliqicmssubs=:K_Notc_aliqicmssubs,' +
      'Notc_descicms=:K_Notc_descicms,' +
      'Notc_aliqdesconto=:K_Notc_aliqdesconto,' +
      'Notc_aliqencargos=:K_Notc_aliqencargos,' +
      'Notc_valorfrete=:K_Notc_valorfrete,' +
      'Notc_valorseguro=:K_Notc_valorseguro,' +
      'Notc_valorencargos=:K_Notc_valorencargos,' +
      'Notc_bcalcipi=:K_Notc_bcalcipi,' +
      'Notc_bcalcicms=:K_Notc_bcalcicms,' +
      'Notc_bcalcicmssubs=:K_Notc_bcalcicmssubs,' +
      'Notc_bcalcdescicms=:K_Notc_bcalcdescicms,' +
      'Notc_dataentrada=:K_Notc_dataentrada,' +
      'Notc_datafatura=:K_Notc_datafatura,' +
      'Notc_valoripi=:K_Notc_valoripi,' +
      'Notc_valoricms=:K_Notc_valoricms,' +
      'Notc_valoricmssubs=:K_Notc_valoricmssubs,' +
      'Notc_valordescicms=:K_Notc_valordescicms,' +
      'Notc_isentaipi=:K_Notc_isentaipi,' +
      'Notc_isentaicms=:K_Notc_isentaicms,' +
      'Notc_outrasipi=:K_Notc_outrasipi,' +
      'Notc_outrasicms=:K_Notc_outrasicms,' +
      'Notc_valorcontabil=:K_Notc_valorcontabil,' +
      'Notc_inscestsubs=:K_Notc_inscestsub,' +
      'Notc_Desconto=:k_Notc_Desconto,' +
      'Imp_NotaFiscal=null,' +
      'Notc_ValorAcresc=:k_Notc_ValorAcresc,' +
      'Notc_IpiAdicional=:k_Notc_IpiAdicional,' +
      'Notc_SeguroCarga=:k_Notc_SeguroCarga,' +
      'Notc_VICMSSeguro=:k_Notc_VICMSSeguro,' +
      'Notc_PICMSSeguro=:k_Notc_PICMSSeguro,' +
      'Notc_Emitente=:k_Notc_Emitente,' +
      'Codf_Codigo1=:k_Codf_Codigo1,' +
      'Canp_Codigo=:k_Canp_Codigo,');

    if Tran_Codigo <> '' then begin
      tq.SQL.add('Tran_Codigo = :k_Tran_Codigo ')
    end else begin
      tq.SQL.add('Tran_Codigo = null ');
    end;

    tq.SQL.add(',Notc_FreteConhecimento=:k_Notc_FreteConhecimento ');
    tq.SQL.add(',Notc_DataLancamento=:k_Notc_DataLancamento ');
    tq.SQL.add(',Notc_TipoFrete=:k_Notc_TipoFrete, ' +
      'Notc_Mensagem=:k_Notc_Mensagem,' +
      'Notc_Hora=:k_Notc_Hora,');

    tq.SQL.add('NFCe_Chave = :k_NFCe_Chave,' +
      'NFCe_Random = :k_NFCe_Random,' +
      'NFCe_Protocolo = :k_NFCe_Protocolo,' +
      'NFCe_Lote = :k_NFCe_Lote,' +
      'NFCe_Justificativa = :k_NFCe_Justificativa,' +
      'NFCe_Modelo = :k_NFCe_Modelo,' +
      'NFCe_Recibo = :k_NFCe_Recibo,' +
      'NFCe_Resultado = :k_NFCe_Resultado,' +
      'NFCe_ChaveOrigem = :k_NFCe_ChaveOrigem,' +
      'Notc_Placaveic = :k_Notc_Placaveic,' +
      'Notc_Uf_Placaveic = :k_Notc_Uf_Placaveic,' +
      'Notc_TotalProduto = :k_Notc_TotalProduto, ' +
      'Mod_Codigo = :k_Mod_Codigo, ' +
      'Notc_Desp_Acessoria =:k_Notc_Desp_Acessoria, ' +
      'NFCe_ChaveRefer=:k_NFCe_ChaveRefer, ' +
      'Notc_TipoNota=:k_Notc_TipoNota, ' +
      'Notc_Serie_Ref=:k_Notc_Serie_Ref, ' +
      'Notac_Numero_Ref=:k_Notac_Numero_Ref, ' +
      'Notc_EstoqueBaixado = :k_Notac_EstoqueBaixado, ' +
      'Notc_Obs_LancFiscal =:k_Notc_Obs_LancFiscal, ');

    if Cod_Mensagem <> '' then
      tq.SQL.Add('Cod_Mensagem=:k_Cod_Mensagem, ')
    else
      tq.SQL.Add('Cod_Mensagem=null, ');

    if Est_Sigla <> '' then
      tq.SQL.Add('est_sigla = :k_est_sigla, ')
    else
      tq.SQL.Add('est_sigla = null, ');

    tq.SQL.Add('NFCe_DataAutorizacao =:k_NFCe_DataAutorizacao, ' +
      'NFCe_HoraAutorizacao =:k_NFCe_HoraAutorizacao, ' +
      'Notc_qtdeemb = :k_Notc_qtdeemb, ');
    if Sit_Codigo = '' then
      tq.SQL.Add('null, ')
    else
      tq.SQL.Add('Sit_Codigo =:k_Sit_Codigo, ');

    tq.SQL.Add('Notc_Pis =:k_Notc_Pis, Notc_Cofins =:k_Notc_Cofins, Notc_Pis_St =:k_Notc_Pis_St, Notc_Cofins_St =:k_Notc_Cofins_St');

    if (Id_Operacao = 0) or (Id_Operacao = -1) then
      tq.SQL.Add(',Id_Operacao = null ')
    else
      tq.SQL.Add(',Id_Operacao = :k_Id_Operacao ');

    if Cod_Obs = '' then
      tq.SQL.Add(', Cod_Obs = null ')
    else
      tq.SQL.Add(', Cod_Obs = :k_Cod_Obs ');

    tq.SQL.Add(', Notc_II=:k_Notc_II, Notc_pesoliq=:k_Notc_pesoliq, Notc_pesobru=:k_Notc_pesobru, Notc_ValorFinanciamento=:k_Notc_ValorFinanciamento ');

    tq.SQL.add('where Notac_numero=:K_NotaC_Numero and Notc_serie =:K_notc_serie and Ent_codigo=:K_ent_codigo');

  end;
  tq.ParamByName('K_Notac_Numero').AsString := p_Notac_numero;
  tq.ParamByName('K_Notc_serie').AsString := p_Notc_serie;
  tq.ParamByName('K_Ent_codigo').AsString := strzero(p_Ent_codigo, 5);
  if reg_codigo <> '' then tq.ParamByName('K_reg_codigo').AsString := reg_Codigo;
  if conf_codigo <> '' then tq.ParamByName('K_conf_codigo').AsString := conf_Codigo;
  tq.ParamByName('K_emp_codigo').AsString := Emp_Codigo;
  tq.ParamByName('K_codf_codigo').AsString := trim(Codf_Codigo);
  tq.ParamByName('K_nato_codigo').AsString := Nato_Codigo;
  tq.ParamByName('K_moe_codigo').AsString := Moe_Codigo;
  tq.ParamByName('K_Hist_codigo').AsString := Hist_codigo;
  tq.ParamByName('K_Notc_numpgtos').AsInteger := Notc_numpgtos;
  tq.ParamByName('K_Notc_observacao').AsString := Notc_observacao;
  tq.ParamByName('K_Notc_aliqipi').AsFloat := Notc_aliqipi;
  tq.ParamByName('K_Notc_aliqicms').AsFloat := Notc_aliqicms;
  tq.ParamByName('K_Notc_aliqicmssubs').AsFloat := Notc_aliqicmssubs;
  tq.ParamByName('K_Notc_descicms').AsFloat := Notc_descicms;
  tq.ParamByName('K_Notc_aliqdesconto').AsFloat := Notc_aliqdesconto;
  tq.ParamByName('K_Notc_aliqencargos').AsFloat := Notc_aliqencargos;
  tq.ParamByName('K_Notc_valorfrete').AsFloat := Notc_valorfrete;
  tq.ParamByName('K_Notc_valorseguro').AsFloat := Notc_valorseguro;
  tq.ParamByName('K_Notc_valorencargos').AsFloat := Notc_valorencargos;
  tq.ParamByName('K_Notc_bcalcipi').AsFloat := Notc_bcalcipi;
  tq.ParamByName('K_Notc_bcalcicms').AsFloat := Notc_bcalcicms;
  tq.ParamByName('K_Notc_bcalcicmssubs').AsFloat := Notc_bcalcicmssubs;
  tq.ParamByName('K_Notc_bcalcdescicms').AsFloat := Notc_bcalcdescicms;
  tq.ParamByName('K_Notc_dataentrada').AsDateTime := Notc_dataentrada;
  tq.ParamByName('K_Notc_datafatura').AsDateTime := Notc_datafatura;
  tq.ParamByName('K_Notc_valoripi').AsFloat := Notc_valoripi;
  tq.ParamByName('K_Notc_valoricms').AsFloat := Notc_valoricms;
  tq.ParamByName('K_Notc_valoricmssubs').AsFloat := Notc_valoricmssubs;
  tq.ParamByName('K_Notc_valordescicms').AsFloat := Notc_valordescicms;
  tq.ParamByName('K_Notc_isentaipi').AsFloat := Notc_isentaipi;
  tq.ParamByName('K_Notc_isentaicms').AsFloat := Notc_isentaicms;
  tq.ParamByName('K_Notc_outrasipi').AsFloat := Notc_outrasipi;
  tq.ParamByName('K_Notc_outrasicms').AsFloat := Notc_outrasicms;
  tq.ParamByName('K_Notc_valorcontabil').AsFloat := Notc_valorcontabil;
  tq.ParamByName('K_Notc_inscestsub').AsString := Notc_inscestsub;
  tq.ParamByName('K_Notc_desconto').AsFloat := Notc_desconto;
  tq.ParamByName('k_Notc_ValorAcresc').AsFloat := Notc_ValorAcresc;
  tq.ParamByName('k_Notc_IpiAdicional').AsFloat := Notc_IpiAdicional;
  tq.ParamByName('k_Notc_SeguroCarga').AsFloat := Notc_SeguroCarga;
  tq.ParamByName('k_Notc_VICMSSeguro').AsFloat := Notc_VICMSSeguro;
  tq.ParamByName('k_Notc_PICMSSeguro').AsFloat := Notc_PICMSSeguro;
  tq.ParamByName('k_Notc_Emitente').AsString := Notc_Emitente;
  tq.ParamByName('k_Codf_Codigo1').AsString := trim(Codf_Codigo1);
  tq.ParamByName('k_Canp_Codigo').AsString := Canp_Codigo;

  if Tran_Codigo <> '' then begin
    tq.ParamByName('k_Tran_Codigo').AsString := Tran_Codigo;
  end;

  tq.ParamByName('k_Notc_FreteConhecimento').AsFloat := Notc_FreteConhecimento;
  tq.ParamByName('k_Notc_DataLancamento').AsDateTime := Notc_DataLancamento;
  tq.ParamByName('k_Notc_TipoFrete').AsString := Notc_TipoFrete;
  tq.ParamByName('k_Notc_Mensagem').AsBlob := Notc_Mensagem;
  tq.ParamByName('k_Notc_Hora').AsString := Notc_Hora;

  tq.ParamByName('k_NFCe_Chave').AsString := NFCe_Chave;
  tq.ParamByName('k_NFCe_Random').AsString := NFCe_Random;
  tq.ParamByName('k_NFCe_Protocolo').AsString := NFCe_Protocolo;
  tq.ParamByName('k_NFCe_Lote').AsString := NFCe_Lote;
  tq.ParamByName('k_NFCe_Justificativa').AsString := NFCe_Justificativa;
  tq.ParamByName('k_NFCe_Modelo').AsString := NFCe_Modelo;
  tq.ParamByName('k_NFCe_Recibo').AsString := NFCe_Recibo;
  tq.ParamByName('k_NFCe_Resultado').AsString := NFCe_Resultado;
  tq.ParamByName('k_NFCe_ChaveOrigem').AsString := NFCe_ChaveOrigem;
  tq.ParamByName('k_Notc_Placaveic').AsString := Notc_Placaveic;
  tq.ParamByName('k_Notc_Uf_Placaveic').AsString := Notc_Uf_Placaveic;
  tq.ParamByName('k_Notc_TotalProduto').AsFloat := Notc_TotalProduto;
  tq.ParamByName('k_Mod_Codigo').AsString := Mod_Codigo;
  tq.ParamByName('k_Notc_Desp_Acessoria').AsFloat := Notc_Desp_Acessoria;
  tq.ParamByName('k_NFCe_ChaveRefer').AsString := NFCe_ChaveRefer;
  tq.ParamByName('k_Notc_TipoNota').AsString := Notc_TipoNota;
  tq.ParamByName('k_Notc_Serie_Ref').AsString := Notc_Serie_Ref;
  tq.ParamByName('k_Notac_Numero_Ref').AsString := Notac_Numero_Ref;
  tq.ParamByName('k_Notac_EstoqueBaixado').AsString := Notc_EstoqueBaixado;
  tq.ParamByName('k_Notc_Obs_LancFiscal').AsString := Notc_Obs_LancFiscal;
  if Cod_Mensagem <> '' then
    tq.ParamByName('k_Cod_Mensagem').AsString := Cod_Mensagem;
  if Est_Sigla <> '' then
    tq.ParamByName('k_est_sigla').AsString := Est_Sigla;
  tq.ParamByName('k_NFCe_DataAutorizacao').AsDate := NFCe_DataAutorizacao;
  tq.ParamByName('k_NFCe_HoraAutorizacao').AsString := NFCe_HoraAutorizacao;
  tq.ParamByName('k_Notc_qtdeemb').AsFloat := Notc_qtdeemb;
  if Sit_Codigo <> '' then
    tq.ParamByName('k_Sit_Codigo').AsString := Sit_Codigo;
  tq.ParamByName('k_Notc_Pis').AsFloat := Notc_Pis;
  tq.ParamByName('k_Notc_Cofins').AsFloat := Notc_Cofins;
  tq.ParamByName('k_Notc_Pis_St').AsFloat := Notc_Pis_St;
  tq.ParamByName('k_Notc_Cofins_St').AsFloat := Notc_Cofins_St;
  if (Id_Operacao <> 0) and (Id_Operacao <> -1) then
    tq.ParamByName('k_Id_Operacao').AsInteger := Id_Operacao;
  if Cod_Obs <> '' then
    tq.ParamByName('k_Cod_Obs').AsString := Cod_Obs;
  tq.ParamByName('k_Notc_II').AsFloat := Notc_II;
  tq.ParamByName('k_Notc_pesoliq').AsFloat:= Notc_pesoliq;
  tq.ParamByName('k_Notc_pesobru').AsFloat:= Notc_pesobru;
  tq.ParamByName('k_Notc_ValorFinanciamento').AsFloat:= Notc_ValorFinanciamento;

  tq.Close;
  try
    GeraLog('NOTACOMPRA', 'Gravar');
    tq.ExecSQL;
    result := 1;

  except
    on E: Exception do begin
      Application.MessageBox(PChar('Erro ao gravar nota: ' + E.Message + #13 + #10 + E.ClassName), 'Erro', mb_iconwarning);
      result := 0;
    end;

  end;

  tq.Close;
  tq.Free;

end;

procedure TNotaCompra.Imprimiu_NF;
var
  tq, tq1: TQuery;
begin
  tq := TQuery.create(DmInt);
  tq.DatabaseName := DmInt.db.DatabaseName;
  tq.Active := false;
  tq1 := TQuery.create(DmInt);
  tq1.DatabaseName := DmInt.db.DatabaseName;
  tq1.Active := false;
  tq.SQL.Clear;
  tq.Params.Clear;
  if serie <> '' then begin
    if numero1 + numero2 <> '' then begin
      if entidade <> '' then begin
        if dataini + datafim <> 0 then begin
          tq.SQL.Add('Select b.Notc_Serie,b.Notac_Numero,b.Ent_Codigo from Backup_NotaCompra b,' +
            'NotaCompra n where (b.Notc_Serie=:a and b.Bkp_Nota>=:b and ' +
            'b.Bkp_Nota<=:c and b.Ent_Codigo=:d) and (n.Notc_datafatura>=:e and ' +
            'n.Notc_datafatura<=:f) and (b.Notac_Numero=n.Notac_Numero)');
          tq.Params[0].AsString := Serie;
          tq.Params[1].AsString := StrZero(Numero1, 9);
          tq.Params[2].AsString := StrZero(Numero2, 9);
          tq.Params[3].AsString := StrZero(Entidade, 5);
          tq.Params[4].AsDateTime := dataini;
          tq.Params[5].AsDateTime := datafim;
        end else begin
          tq.SQL.Add('Select Notc_Serie,Notac_Numero,Ent_Codigo from Backup_NotaCompra ' +
            'where Notc_Serie=:a and Bkp_Nota>=:b and Bkp_Nota<=:c ' +
            'and Ent_Codigo=:d');
          tq.Params[0].AsString := Serie;
          tq.Params[1].AsString := StrZero(Numero1, 9);
          tq.Params[2].AsString := StrZero(Numero2, 9);
          tq.Params[3].AsString := StrZero(Entidade, 5);
        end;
      end else begin
        if dataini + datafim <> 0 then begin
          tq.SQL.Add('Select b.Notc_Serie,b.Notac_Numero,b.Ent_Codigo from Backup_NotaCompra b,' +
            'NotaCompra n where (b.Notc_Serie=:a and b.Bkp_Nota>=:b and ' +
            'b.Bkp_Nota<=:c) and (n.Notc_datafatura>=:e and ' +
            'n.Notc_datafatura<=:f) and (b.Notac_Numero=n.Notac_Numero)');
          tq.Params[0].AsString := Serie;
          tq.Params[1].AsString := StrZero(Numero1, 9);
          tq.Params[2].AsString := StrZero(Numero2, 9);
          tq.Params[3].AsDateTime := dataini;
          tq.Params[4].AsDateTime := datafim;
        end else begin
          tq.SQL.Add('Select Notc_Serie,Notac_Numero,Ent_Codigo from Backup_NotaCompra ' +
            'where Notc_Serie=:a and Bkp_Nota>=:b and Bkp_Nota<=:c');
          tq.Params[0].AsString := Serie;
          tq.Params[1].AsString := StrZero(Numero1, 9);
          tq.Params[2].AsString := StrZero(Numero2, 9);
        end;
      end;
    end else begin
      if entidade <> '' then begin
        if dataini + datafim <> 0 then begin
          tq.SQL.Add('Select b.Notc_Serie,b.Notac_Numero,b.Ent_Codigo from Backup_NotaCompra b,' +
            'NotaCompra n where (b.Notc_Serie=:a and b.Ent_Codigo=:d) and ' +
            '(n.Notc_datafatura>=:e and n.Notc_datafatura<=:f) and ' +
            '(b.Notac_Numero=n.Notac_Numero)');
          tq.Params[0].AsString := Serie;
          tq.Params[1].AsString := StrZero(Entidade, 5);
          tq.Params[2].AsDateTime := dataini;
          tq.Params[3].AsDateTime := datafim;
        end else begin
          tq.SQL.Add('Select Notc_Serie,Notac_Numero,Ent_Codigo from Backup_NotaCompra ' +
            'where Notc_Serie=:a and Ent_Codigo=:d');
          tq.Params[0].AsString := Serie;
          tq.Params[1].AsString := StrZero(Entidade, 5);
        end;
      end else begin
        if dataini + datafim <> 0 then begin
          tq.SQL.Add('Select b.Notc_Serie,b.Notac_Numero,b.Ent_Codigo from Backup_NotaCompra b,' +
            'NotaCompra n where (b.Notc_Serie=:a) and (n.Notc_datafatura>=:e and ' +
            'n.Notc_datafatura<=:f) and (b.Notac_Numero=n.Notac_Numero)');
          tq.Params[0].AsString := Serie;
          tq.Params[1].AsDateTime := dataini;
          tq.Params[2].AsDateTime := datafim;
        end else begin
          tq.SQL.Add('Select Notc_Serie,Notac_Numero,Ent_Codigo from Backup_NotaCompra ' +
            'where Notc_Serie=:a');
          tq.Params[0].AsString := Serie;
        end;
      end;
    end;
  end else begin
    if numero1 + numero2 <> '' then begin
      if entidade <> '' then begin
        if dataini + datafim <> 0 then begin
          tq.SQL.Add('Select b.Notc_Serie,b.Notac_Numero,b.Ent_Codigo from Backup_NotaCompra b,' +
            'NotaCompra n where (b.Bkp_Nota>=:b and b.Bkp_Nota<=:c and ' +
            'b.Ent_Codigo=:d) and (n.Notc_datafatura>=:e and ' +
            'n.Notc_datafatura<=:f) and (b.Notac_Numero=n.Notac_Numero)');
          tq.Params[0].AsString := StrZero(Numero1, 9);
          tq.Params[1].AsString := StrZero(Numero2, 9);
          tq.Params[2].AsString := StrZero(Entidade, 5);
          tq.Params[3].AsDateTime := dataini;
          tq.Params[4].AsDateTime := datafim;
        end else begin
          tq.SQL.Add('Select Notc_Serie,Notac_Numero,Ent_Codigo from Backup_NotaCompra ' +
            'where Bkp_Nota>=:b and Bkp_Nota<=:c and Ent_Codigo=:d');
          tq.Params[0].AsString := StrZero(Numero1, 9);
          tq.Params[1].AsString := StrZero(Numero2, 9);
          tq.Params[2].AsString := StrZero(Entidade, 5);
        end;
      end else begin
        if dataini + datafim <> 0 then begin
          tq.SQL.Add('Select b.Notc_Serie,b.Notac_Numero,b.Ent_Codigo from Backup_NotaCompra b,' +
            'NotaCompra n where (b.Bkp_Nota>=:b and b.Bkp_Nota<=:c) and ' +
            '(n.Notc_datafatura>=:e and n.Notc_datafatura<=:f) and ' +
            '(b.Notac_Numero=n.Notac_Numero)');
          tq.Params[0].AsString := StrZero(Numero1, 9);
          tq.Params[1].AsString := StrZero(Numero2, 9);
          tq.Params[2].AsDateTime := dataini;
          tq.Params[3].AsDateTime := datafim;
        end else begin
          tq.SQL.Add('Select Notc_Serie,Notac_Numero,Ent_Codigo from Backup_NotaCompra ' +
            'where Bkp_Nota>=:b and Bkp_Nota<=:c');
          tq.Params[0].AsString := StrZero(Numero1, 9);
          tq.Params[1].AsString := StrZero(Numero2, 9);
        end;
      end;
    end else begin
      if entidade <> '' then begin
        if dataini + datafim <> 0 then begin
          tq.SQL.Add('Select b.Notc_Serie,b.Notac_Numero,b.Ent_Codigo from Backup_NotaCompra b,' +
            'NotaCompra n where (b.Ent_Codigo=:d) and ' +
            '(n.Notc_datafatura>=:e and n.Notc_datafatura<=:f) and ' +
            '(b.Notac_Numero=n.Notac_Numero)');
          tq.Params[0].AsString := StrZero(Entidade, 5);
          tq.Params[1].AsDateTime := dataini;
          tq.Params[2].AsDateTime := datafim;
        end else begin
          tq.SQL.Add('Select Notc_Serie,Notac_Numero,Ent_Codigo from Backup_NotaCompra ' +
            'where Ent_Codigo=:d');
          tq.Params[0].AsString := StrZero(Entidade, 5);
        end;
      end else begin
        if dataini + datafim <> 0 then begin
          tq.SQL.Add('Select b.Notc_Serie,b.Notac_Numero,b.Ent_Codigo from Backup_NotaCompra b,' +
            'NotaCompra n where (n.Notc_datafatura>=:e and n.Notc_datafatura<=:f) and ' +
            '(b.Notac_Numero=n.Notac_Numero)');
          tq.Params[0].AsDateTime := dataini;
          tq.Params[1].AsDateTime := datafim;
        end else begin
          tq.SQL.Add('Select Notc_Serie,Notac_Numero,Ent_Codigo from Backup_NotaCompra');
        end;
      end;
    end;
  end;
  tq.Open;
  while not tq.eof do begin
    tq1.Close;
    tq1.SQL.Clear;
    tq1.Params.Clear;
    tq1.SQL.Add('Update NotaCompra set Imp_NotaFiscal=:a where Notc_Serie=:b and Notac_Numero=:c ' +
      'and Ent_Codigo=:d');
    tq1.Params[0].AsString := 'S';
    tq1.Params[1].AsString := tq.FieldByName('Notc_Serie').AsString;
    tq1.Params[2].AsString := tq.FieldByName('Notac_Numero').AsString;
    tq1.Params[3].AsString := tq.FieldByName('Ent_Codigo').AsString;
    GeraLog('NOTACOMPRA', 'Imprimiu_NF');
    tq1.ExecSQL;
    tq.next;
  end;
  tq.Close;
  tq.Free;
  tq1.Close;
  tq1.Free;
end;

function TNotaCompra.RecuperaChave(serie, numero,
  ent_codigo: string): string;
var
  tq: TQuery;

begin
  tq := TQuery.Create(DmInt.Db);
  tq.DatabaseName := DmInt.Db.DatabaseName;
  tq.Active := false;

  try
    tq.Close;
    tq.SQL.Clear;
    tq.Params.Clear;
    tq.SQL.Add('select NfCe_Chave ' +
      'from notacompra ' +
      'where notac_numero = ' + QuotedStr(numero) +
      ' and notc_serie = ' + QuotedStr(serie) + 'and ent_codigo = ' + QuotedStr(ent_codigo));
    tq.Open;
    Result := tq.FieldByName('NfCe_Chave').AsString;
  finally
    tq.Close;
    FreeAndNil(tq);
  end;

end;

function TNotaCompra.Recuperar(p_Notac_numero, p_Notc_serie,
  p_Ent_codigo: string): Byte;
var
  tq: tquery;
begin
  tq := TQuery.create(DmInt);
  tq.DatabaseName := DmInt.Db.DatabaseName;
  tq.Active := false;
  tq.SQL.Clear;
  tq.Params.Clear;
  tq.SQL.add('Select * from Notacompra where NotaC_numero=:K_notac_numero and Notc_serie=:K_notc_serie and Ent_codigo=:k_Ent_codigo');
  tq.Params[0].AsString := p_Notac_numero;
  tq.Params[1].AsString := p_Notc_serie;
  tq.Params[2].AsString := StrZero(p_Ent_codigo, 5);
  tq.Open;
  Notac_Numero := p_Notac_numero;
  Notc_Serie := p_Notc_serie;
  Ent_Codigo := p_Ent_codigo;
  if tq.Eof then begin
    Notc_dataentrada := Date;
    Notc_datafatura := Date;
    Result := 0;
  end else begin
    Notc_dataentrada := tq.FieldByName('Notc_dataentrada').AsDateTime;
    Notc_datafatura := tq.FieldByName('Notc_datafatura').AsDateTime;
    Result := 1;
  end;
  Reg_Codigo := tq.FieldByName('reg_codigo').AsString;
  Conf_Codigo := tq.FieldByName('conf_codigo').AsString;
  Emp_Codigo := tq.FieldByName('emp_codigo').AsString;
  Codf_Codigo := tq.FieldByName('codf_codigo').AsString;
  Nato_Codigo := tq.FieldByName('nato_codigo').AsString;
  Moe_Codigo := tq.FieldByName('moe_codigo').AsString;
  Hist_codigo := tq.FieldByName('Hist_codigo').AsString;
  Notc_numpgtos := tq.FieldByName('Notc_numpgtos').AsInteger;
  Notc_observacao := tq.FieldByName('Notc_observacao').AsString;
  Notc_aliqipi := tq.FieldByName('Notc_aliqipi').AsFloat;
  Notc_aliqicms := tq.FieldByName('Notc_aliqicms').AsFloat;
  Notc_aliqicmssubs := tq.FieldByName('Notc_aliqicmssubs').AsFloat;
  Notc_descicms := tq.FieldByName('Notc_descicms').AsFloat;
  Notc_aliqdesconto := tq.FieldByName('Notc_aliqdesconto').AsFloat;
  Notc_aliqencargos := tq.FieldByName('Notc_aliqencargos').AsFloat;
  Notc_valorfrete := tq.FieldByName('Notc_valorfrete').AsFloat;
  Notc_valorseguro := tq.FieldByName('Notc_valorseguro').AsFloat;
  Notc_valorencargos := tq.FieldByName('Notc_valorencargos').AsFloat;
  Notc_bcalcipi := tq.FieldByName('Notc_bcalcipi').AsFloat;
  Notc_bcalcicms := tq.FieldByName('Notc_bcalcicms').AsFloat;
  Notc_bcalcicmssubs := tq.FieldByName('Notc_bcalcicmssubs').AsFloat;
  Notc_bcalcdescicms := tq.FieldByName('Notc_bcalcdescicms').AsFloat;
  Notc_valoripi := tq.FieldByName('Notc_valoripi').AsFloat;
  Notc_valoricms := tq.FieldByName('Notc_valoricms').AsFloat;
  Notc_valoricmssubs := tq.FieldByName('Notc_valoricmssubs').AsFloat;
  Notc_valordescicms := tq.FieldByName('Notc_valordescicms').AsFloat;
  Notc_isentaipi := tq.FieldByName('Notc_isentaipi').AsFloat;
  Notc_isentaicms := tq.FieldByName('Notc_isentaicms').AsFloat;
  Notc_outrasipi := tq.FieldByName('Notc_outrasipi').AsFloat;
  Notc_outrasicms := tq.FieldByName('Notc_outrasicms').AsFloat;
  Notc_valorcontabil := tq.FieldByName('Notc_valorcontabil').AsFloat;
  Notc_inscestsub := tq.FieldByName('Notc_inscestsubs').AsString;
  Notc_desconto := tq.FieldByName('Notc_desconto').AsFloat;
  Imp_NotaFiscal := tq.FieldByName('Imp_NotaFiscal').AsString;
  Notc_ValorAcresc := tq.FieldByName('Notc_ValorAcresc').AsFloat;
  Notc_IpiAdicional := tq.FieldByName('Notc_IpiAdicional').AsFloat;
  Notc_SeguroCarga := tq.FieldByName('Notc_SeguroCarga').AsFloat;
  Notc_VICMSSeguro := tq.FieldByName('Notc_VICMSSeguro').AsFloat;
  Notc_PICMSSeguro := tq.FieldByName('Notc_PICMSSeguro').AsFloat;
  Notc_Emitente := tq.FieldByName('Notc_Emitente').AsString;
  Codf_Codigo1 := tq.FieldByName('Codf_Codigo1').AsString;
  Canp_Codigo := tq.FieldByName('Canp_Codigo').AsString;
  Tran_Codigo := tq.FieldByName('Tran_Codigo').AsString;
  Notc_FreteConhecimento := tq.FieldByName('Notc_FreteConhecimento').AsFloat;
  Notc_DataLancamento := tq.FieldByName('Notc_DataLancamento').AsFloat;
  Notc_TipoFrete := tq.FieldByName('Notc_TipoFrete').AsString;
  Notc_Mensagem := tq.FieldByName('Notc_Mensagem').AsString;
  Notc_Hora := tq.FieldByName('Notc_Hora').AsString;

  NFCe_Chave := tq.FieldByName('NFCe_Chave').AsString;
  NFCe_Random := tq.FieldByName('NFCe_Random').AsString;
  NFCe_Protocolo := tq.FieldByName('NFCe_Protocolo').AsString;
  NFCe_Lote := tq.FieldByName('NFCe_Lote').AsString;
  NFCe_Justificativa := tq.FieldByName('NFCe_Justificativa').AsString;
  NFCe_Modelo := tq.FieldByName('NFCe_Modelo').AsString;
  NFCe_Recibo := tq.FieldByName('NFCe_Recibo').AsString;
  NFCe_Resultado := tq.FieldByName('NFCe_Resultado').AsString;
  NFCe_ChaveOrigem := tq.FieldByName('NFCe_ChaveOrigem').AsString;

  Notc_Placaveic := tq.FieldByName('Notc_Placaveic').AsString;
  Notc_Uf_Placaveic := tq.FieldByName('Notc_Uf_Placaveic').AsString;
  Notc_TotalProduto := tq.FieldByName('Notc_TotalProduto').AsFloat;
  Mod_Codigo := tq.FieldByName('Mod_Codigo').AsString;
  Notc_Desp_Acessoria := tq.FieldByName('Notc_Desp_Acessoria').AsFloat;
  NFCe_ChaveRefer := tq.FieldBYName('NFCe_ChaveRefer').AsString;
  Notc_TipoNota := tq.FieldByName('Notc_TipoNota').AsString;
  Notc_Serie_Ref := tq.FieldByName('Notc_Serie_Ref').AsString;
  Notac_Numero_Ref := tq.FieldByName('Notac_Numero_Ref').AsString;
  Notc_EstoqueBaixado := tq.FieldByName('Notc_EstoqueBaixado').AsString;
  Notc_Obs_LancFiscal := tq.FieldByName('Notc_Obs_LancFiscal').AsString;
  Cod_Mensagem := tq.FieldByName('Cod_Mensagem').AsString;
  Est_Sigla := tq.FieldByName('Est_Sigla').AsString;
  NFCe_DataAutorizacao := tq.FieldByName('NFCe_DataAutorizacao').AsDateTime;
  NFCe_HoraAutorizacao := tq.FieldByname('NFCe_HoraAutorizacao').AsString;
  Notc_qtdeemb := tq.FieldByname('Notc_qtdeemb').AsFloat;
  Sit_Codigo := tq.FieldByName('Sit_Codigo').AsString;
  Notc_Pis := tq.FieldByName('Notc_Pis').AsFloat;
  Notc_Cofins := tq.FieldByName('Notc_Cofins').AsFloat;
  Notc_Pis_St := tq.FieldByName('Notc_Pis_St').AsFloat;
  Notc_Cofins_St := tq.FieldByName('Notc_Cofins_St').AsFloat;
  Id_Operacao := tq.FieldByName('Id_Operacao').AsInteger;
  Cod_Obs := tq.FieldByName('Cod_Obs').AsString;
  Notc_II := tq.FieldByName('Notc_II').AsFloat;
  Notc_pesoliq:= tq.FieldByName('Notc_pesoliq').AsFloat;
  Notc_pesobru:= tq.FieldByName('Notc_pesobru').AsFloat;
  Notc_ValorFinanciamento:= tq.FieldByName('Notc_ValorFinanciamento').AsFloat;

  tq.Close;
  tq.Free;

end;

function TNotaCompra.Recupera_QtdeItens(p_Notac_numero, p_Notc_serie,
  p_Ent_codigo: string): Double;
var
  tq: TQuery;
  xtot_prod: double;
begin
  tq := TQuery.create(DmInt);
  tq.DatabaseName := DmInt.db.DatabaseName;
  tq.Active := false;
  tq.SQL.Clear;
  tq.Params.Clear;
  tq.SQL.Add('Select * from ItemNotaCompra where Notc_Serie=:a and Notac_Numero=:b ' +
    'and Ent_Codigo=:c');
  tq.Params[0].AsString := p_Notc_serie;
  tq.Params[1].AsString := StrZero(p_Notac_numero, 9);
  tq.Params[2].AsString := StrZero(p_Ent_codigo, 5);
  tq.Open;
  xtot_prod := 0;
  while not tq.eof do begin
    xtot_prod := xtot_prod + tq.FieldByName('Itnc_quantidade').asfloat;
    tq.next;
  end;
  result := xtot_prod;
  tq.Close;
  tq.Free;
end;

function TNotaCompra.Total_Produtos;
var
  tq: TQuery;
  xtot_prod: double;
begin
  tq := TQuery.create(DmInt);
  tq.DatabaseName := DmInt.db.DatabaseName;
  tq.Active := false;
  tq.SQL.Clear;
  tq.Params.Clear;
  tq.SQL.Add('Select * from ItemNotaCompra where Notc_Serie=:a and Notac_Numero=:b ' +
    'and Ent_Codigo=:c');
  tq.Params[0].AsString := p_Notc_serie;
  tq.Params[1].AsString := StrZero(p_Notac_numero, 9);
  tq.Params[2].AsString := StrZero(p_Ent_codigo, 5);
  tq.Open;
  xtot_prod := 0;
  while not tq.eof do begin
    xtot_prod := xtot_prod + (tq.FieldByName('Itnc_valorunit').asfloat * tq.FieldByName('Itnc_quantidade').asfloat);
    tq.next;
  end;
  result := xtot_prod;
  tq.Close;
  tq.Free;
end;

function TNotaCompra.Ultimo: string;
var
  tq: TQuery;
begin
  tq := TQuery.create(DmInt);
  tq.DatabaseName := DmInt.db.DatabaseName;
  tq.Active := false;
  tq.SQL.Clear;
  tq.Params.Clear;
  tq.SQL.Add('Select max(Notac_Numero) ultimo from NotaCompra');
  tq.Open;
  if tq.FieldByName('ultimo').AsString = '' then begin
    result := '000000001'
  end else begin
    result := strzero(tq.FieldByName('ultimo').asinteger + 1, 9);
  end;
  tq.Close;
  tq.Free;
end;

end.

